package com.example.springboot.service.impl;

import com.example.springboot.entity.UserInfo;
import com.example.springboot.repository.UserRepository;
import com.example.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 用户服务实现类
 * 实现UserService接口，提供用户登录等功能的具体业务逻辑实现
 * 负责处理与用户相关的所有业务操作，如用户验证、信息查询等
 */
@Service
public class UserServiceImpl implements UserService {

    /**
     * 注入用户数据访问接口
     * 用于操作用户数据，如查询、保存等
     */
    @Autowired
    private UserRepository userRepository;

    /**
     * 用户登录验证
     * 根据用户账号查询用户信息，并验证密码是否匹配
     * 
     * @param userAccount  用户账号，用于查询用户信息
     * @param userPassword 用户密码，用于验证用户身份
     * @return 验证成功返回用户信息对象，验证失败返回null
     */
    @Override
    public UserInfo login(Long userAccount, Long userPassword) {
        // 根据账号查询用户
        UserInfo userInfo = userRepository.findByUserAccount(userAccount);

        // 验证用户是否存在且密码是否正确
        if (userInfo != null && userInfo.getUserPassword().equals(userPassword)) {
            return userInfo;
        }

        return null;
    }

    /**
     * 用户注册
     * 创建新用户并保存到数据库
     * 
     * @param userInfo 用户信息对象，包含用户的所有注册信息
     * @return 注册成功返回保存后的用户信息对象，注册失败返回null
     */
    @Override
    public UserInfo register(UserInfo userInfo) {
        // 检查账号是否已存在
        if (isAccountExists(userInfo.getUserAccount().longValue())) {
            return null; // 账号已存在，注册失败
        }

        // 保存用户信息到数据库
        return userRepository.save(userInfo);
    }

    /**
     * 检查用户账号是否已存在
     * 
     * @param userAccount 用户账号
     * @return 如果账号已存在返回true，否则返回false
     */
    @Override
    public boolean isAccountExists(Long userAccount) {
        UserInfo existingUser = userRepository.findByUserAccount(userAccount);
        return existingUser != null;
    }

    /**
     * 更新用户信息
     * 根据用户ID更新用户信息
     * 
     * @param userInfo 包含更新信息的用户对象
     * @return 更新成功返回更新后的用户信息对象，更新失败返回null
     */
    @Override
    public UserInfo updateUserInfo(UserInfo userInfo) {
        // 检查用户是否存在
        if (userInfo.getUserId() == null) {
            return null; // 用户ID为空，无法更新
        }

        // 查找现有用户
        UserInfo existingUser = findUserById(userInfo.getUserId());
        if (existingUser == null) {
            return null; // 用户不存在，无法更新
        }

        // 保存更新后的用户信息
        return userRepository.save(userInfo);
    }

    /**
     * 根据用户ID查找用户
     * 
     * @param userId 用户ID
     * @return 查询到的用户信息对象，如果不存在则返回null
     */
    @Override
    public UserInfo findUserById(Integer userId) {
        return userRepository.findById(userId).orElse(null);
    }
}